<?php

namespace app\api\controller;

use think\Controller;
use think\Db;

/**
 * 示例接口
 */
class Wx extends Controller
{
    private $token = 'miao';

    public function index()
    {

        //如果没有通过GET收到echostr字符串， 说明不是再使用token验证
        //调用valid()方法，进行token验证
        $echoStr = $this->request->param('echostr');
        if($this->valid()){
            echo $echoStr;
        }

    }


    public function valid() {
        //在开发者首次提交验证申请时，微信服务器将发送GET请求到填写的URL上，并且带上四个参数（signature、timestamp、nonce、echostr），开发者通过对签名（即signature）的效验，来判断此条消息的真实性。
        $signature = $this->request->param('signature');//微信加密签名，signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
        //时间戳
        $timestamp = $this->request->param('timestamp');
        //随机数
        $nonce = $this->request->param('nonce');
        //上面通过常量声明的token值
        $token = $this->token;
        //将token、timestamp、nonce三个参数进行字典序排序
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        //将三个参数字符串拼接成一个字符串进行sha1加密
        $tmpStr = implode( $tmpArr );//将数排序过的数组组合成一个字符
        $tmpStr = sha1( $tmpStr );//使用sha1加密
        //如果公众号上的签名和服务器上的签名是相等的则验正成功
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }

}
